//
//  NSDate+Extension.swift
//  上海微博
//
//  Created by co on 16/3/4.
//  Copyright © 2016年 王南侠. All rights reserved.
//

import Foundation

/// NSDateFormatter 常量
private let cz_shareDateFormatter = NSDateFormatter()
/// 当前日历对象
private let cz_shareCanlendar = NSCalendar.currentCalendar()

/**
 在ios开发中NSDataFormatter / NSCalendar 性能异常糟糕！
 每次 “创建” / 销毁非常消耗性能
 
 - 解决办法：定义一个常量，在OC中定义一个单例
 
 */

extension NSDate {
    
    /**
     将新浪日期格式字符串转换成日期
     
     - parameter creat_at: Fri Mar 04 00:14:03 +0800 2016
     
     - returns: 日期对象
     */
    class func cz_sinaDate(creat_at:String?) -> NSDate? {
        guard let creat_at = creat_at else {
            return nil
        }
        
        
       cz_shareDateFormatter.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy" // 敲错就会不显示
        // 注意一定要设置区域，如果不设置，模拟器工作正常真机无法正常计算
        cz_shareDateFormatter.locale = NSLocale(localeIdentifier: "en")
        
        // 转换结果
        return cz_shareDateFormatter.dateFromString(creat_at)
    }
    
    // 返回日子格式字符串
    /**
    刚刚(一分钟内)
    X分钟前(一小时内)
    X小时前(当天)
    昨天 HH:mm(昨天)
    MM-dd HH:mm(一年内)
    yyyy-MM-dd HH:mm(更早期)
    */
    
    var cz_dateDescription:String {
        
        // 1.判断是否是今天
        if cz_shareCanlendar.isDateInToday(self){
        
            // 计算当前系统时间和self 之间的时间差值
            let delta = Int(NSDate().timeIntervalSinceDate(self))
            
            if delta < 60 {
                return "刚刚"
            }
            
            if delta < 60 * 60 {
                
                return "\(delta / 60) 分钟前"
            }
            
            return "\(delta / 3600) 小时前"
        }
        
        // 2.判断是否为昨天
        /**
        *   1.1 在IOS 开发中如果设计日期转换，首先考虑 calendar
            1.2 compnent的方法 可以指定任何日期组件 查询日期
        
        */
        var format = "HH:mm"
        if cz_shareCanlendar.isDateInYesterday(self) {
          format = "昨天" + format
        }   else {
            format = "MM-dd" + format
            
            let year = cz_shareCanlendar.components(.Year, fromDate: NSDate())
            let thisyear = cz_shareCanlendar.components(.Year, fromDate: NSDate())
            
            
            if year != thisyear {
                format = "yyyy-" + format
            }
        }
        
        // 转换日期
        cz_shareDateFormatter.dateFormat = format
        cz_shareDateFormatter.locale = NSLocale(localeIdentifier: "en")
        
        return cz_shareDateFormatter.stringFromDate(self)
        

    }
}